package org.fujay.langchain4jserver.domain.model.repository;

import org.fujay.langchain4jserver.domain.model.aggregate.Model;
import org.fujay.langchain4jserver.domain.model.vo.ModelId;
import org.fujay.langchain4jserver.domain.model.vo.ModelType;

import java.util.List;
import java.util.Optional;

/**
 * 模型仓储接口
 */
public interface ModelRepository {

    /**
     * 保存模型（新增或更新）
     *
     * @param model 模型聚合根
     */
    void save(Model model);

    /**
     * 根据ID查找模型
     *
     * @param id 模型ID
     * @return 模型聚合根 Optional
     */
    Optional<Model> findById(ModelId id);

    /**
     * 根据ID删除模型（具体实现可能是逻辑删除或物理删除）
     *
     * @param id 模型ID
     */
    void deleteById(ModelId id);

    /**
     * 查找所有模型
     *
     * @return 模型列表
     */
    List<Model> findAll();

    /**
     * 根据类型查找启用的模型
     *
     * @param modelType 模型类型
     * @return 模型列表
     */
    List<Model> findEnabledByType(ModelType modelType);

    /**
     * 根据供应商查找模型
     *
     * @param supplierCode 供应商代码
     * @return 模型列表
     */
    List<Model> findBySupplier(String supplierCode);

    /**
     * 检查具有给定ID的模型是否存在
     *
     * @param id 模型ID
     * @return 如果存在则返回 true，否则返回 false
     */
    boolean existsById(ModelId id);
}
